
public abstract class Primitive {

	private Surface surface;
	
	public Vector intersectionPoint(Vector source, Vector target ){
		return intersectionPoint_direction(source, Vector.sub_n(target, source));
	}
	
	public abstract Vector intersectionPoint_direction(Vector source, Vector direction );
	
	public abstract Vector getNormalAt(Vector target, Vector viewDirection);
	
	public abstract Vector getLowestPoint();
	public abstract Vector getHighestPoint();
	
	
	public Vector DBG_colorAt(Vector v){
		return v.normlized();
	}
	
	public void setSurface(Surface surface) {
		this.surface = surface;
	}
	
	public Surface getSurface() {
		return this.surface;
	}
	
	public void setMtlType(String mtlType) {
		this.surface.setMtlType(mtlType);
	}

	public String getMtlType() {
		return this.surface.getMtlType();
	}

	public void setTexture(String texture) {
		this.surface.setTexture(texture);
	}

	public String getTexture() {
		return this.surface.getTexture();
	}

	public void setMtlDiffuse(RGB mtlDiffuse) {
		this.surface.setMtlDiffuse(mtlDiffuse);
	}
	
	public RGB getMtlDiffuse() {
		return this.surface.getMtlDiffuse();
	}
	
	public void setMtlSpecular(RGB mtlSpecular) {
		this.surface.setMtlSpecular(mtlSpecular);
	}
	
	public RGB getMtlSpecular() {
		return this.surface.getMtlSpecular();
	}
	public void setMtlAmbient(RGB mtlAmbient) {
		this.surface.setMtlAmbient(mtlAmbient);
	}
	
	public RGB getMtlAmbient() {
		return this.surface.getMtlAmbient();
	}
	
	public void setMtlEmission(RGB mtlEmission) {
		this.surface.setMtlEmission(mtlEmission);
	}
	
	public RGB getMtlEmission() {
		return this.surface.getMtlEmission();
	}
	
	public void setCheckersDiffuse1(RGB checkersDiffuse1) {
		this.surface.setCheckersDiffuse1(checkersDiffuse1);
	}
	
	public RGB getCheckersDiffuse1() {
		return this.surface.getCheckersDiffuse1();
	}

	public void setCheckersDiffuse2(RGB checkersDiffuse2) {
		this.surface.setCheckersDiffuse2(checkersDiffuse2);
	}
	
	public RGB getCheckersDiffuse2() {
		return this.surface.getCheckersDiffuse2();
	}
	
	public void setCheckersSize(double checkersSize){
		this.surface.setCheckersSize(checkersSize);
	}
	
	public double getCheckersSize() {
		return this.surface.getCheckersSize();
	}

	public void setMtlShininess(double mtlShininess){
		this.surface.setMtlShininess(mtlShininess);
	}
	
	public double getMtlShininess() {
		return this.surface.getMtlShininess();
	}

	public void setReflectance(double reflectance){
		this.surface.setReflectance(reflectance);
	}
	
	public double getReflectance() {
		return this.surface.getReflectance();
	}


	
}
